package cn.iocoder.yudao.module.erp.controller.admin.contract.vo;

import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.framework.excel.core.convert.LocalDateTimeConverter;
import cn.iocoder.yudao.module.erp.controller.admin.contractpaymentplan.vo.ContractPaymentPlanRespVO;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

@Schema(description = "管理后台 - 合同信息 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ContractRespVO {

    private Long id;

    @Schema(description = "合同编号", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("合同编号")
    private String contractNo;

    @Schema(description = "合同名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
    @ExcelProperty("合同名称")
    private String contractName;

    @Schema(description = "甲方名称")
    @ExcelProperty("甲方")
    private String partyA;

    @Schema(description = "签订时间")
    @ExcelProperty(value = "合同签订日期", converter = LocalDateTimeConverter.class)
    private LocalDateTime signingDate;

    @Schema(description = "乙方名称")
    @ExcelProperty("乙方")
    private String partyB;

    @Schema(description = "合同状态", example = "2")
    @ExcelProperty(value = "合同状态", converter = DictConvert.class)
    @DictFormat("contract_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String contractStatus;

    @Schema(description = "合同签署责任人")
    @ExcelProperty("合同签署责任人")
    private String contractResponsiblePerson;

    @Schema(description = "合同税率")
    private BigDecimal contractTaxRate;

    @Schema(description = "合同总金额（含税）")
    private BigDecimal contractAmountInclTax;

    @Schema(description = "合同总金额（不含税）")
    private BigDecimal contractAmountExclTax;

    @Schema(description = "合同责任部门ID", example = "5559")
    private Long contractDepartmentId;

    @Schema(description = "合同责任部门")
    private String contractDepartment;

    @Schema(description = "合同责任人ID", example = "7972")
    private Long contractResponsiblePersonId;

    @Schema(description = "责任人联系电话")
    private String responsiblePersonPhone;

    @Schema(description = "甲方签署人员ID", example = "10852")
    private Long partyAManagerId;

    @Schema(description = "甲方签署人员")
    private String partyAManager;

    @Schema(description = "乙方公司名称")
    private String partyBDepartment;

    @Schema(description = "乙方责任人")
    private String partyBResponsiblePerson;

    @Schema(description = "乙方联系人电话")
    private String partyBManagerPhone;

    @Schema(description = "乙方签署人员")
    private String partyBManager;

    @Schema(description = "乙方联系人微信")
    private String partyBManagerWx;

    @Schema(description = "乙方联系人邮箱")
    private String partyBManagerEmail;

    @Schema(description = "紧急程度")
    @DictFormat("urgency_level") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String urgencyLevel;

    @Schema(description = "保密程度")
    @DictFormat("confidentiality_level") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String confidentialityLevel;

    @Schema(description = "生效日期")
    private LocalDateTime effectiveDate;

    @Schema(description = "终止日期")
    private LocalDateTime expirationDate;

    @Schema(description = "摘要内容")
    private String contractSummary;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private LocalDateTime createTime;

    @Schema(description = "合同付款计划")
    private ContractPaymentPlanRespVO paymentPlanRespVO;

    @Schema(description = "审核状态")
    private Integer status;
}